#ifndef COMMON_H
#define COMMON_H

#include <windows.h>

// 游戏常量定义
constexpr int MapWidth = 118;      // 地图宽度(偶数)
constexpr int MapHeight = 29;      // 地图高度
constexpr int InitialSpeed = 100;  // 初始速度
constexpr int SpeedIncrement = 30;// 速度增量
constexpr int ScoreIncrement = 10; // 分数增量

constexpr int InitialInterval = 500; // 初始间隔

// 方向枚举
enum class Direction : int {
    Up = 72,     // 上
    Left = 75,   // 左
    Right = 77,  // 右
    Down = 80,   // 下
    None = 0     // 无方向
};

// 游戏状态枚举
enum class GameStatus {
    Running,     // 运行中
    Paused,      // 暂停
    GameOver,    // 游戏结束
    Menu         // 菜单界面
};

// 游戏模式枚举
enum class GameMode {
    Player,      // 玩家控制
    AI           // AI控制
};

// 食物结构体
struct Food {
    int x;       // x坐标(偶数)
    int y;       // y坐标
};

// 蛇节点结构体
struct SnakeNode {
    int x;            // x坐标(偶数)
    int y;            // y坐标
    SnakeNode* next;  // 下一个节点
    SnakeNode* prev;  // 前一个节点
    
    // 构造函数
    SnakeNode(int xPos, int yPos, SnakeNode* n = nullptr, SnakeNode* p = nullptr) 
        : x(xPos), y(yPos), next(n), prev(p) {}
};

// 游戏配置结构体
struct GameConfig {
    bool wallPassing = true;    // 是否穿墙
    bool showAIPath = false;    // 是否显示AI路径
    int difficulty = 2;         // 难度级别(1-3)
};

// 辅助宏定义
#define SAFE_DELETE(p) { if(p) { delete (p); (p) = nullptr; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p) = nullptr; } }

#endif // COMMON_H